package com.itheima.reggie.common;

/**
 * threadLocal是什么：
 * threadLocal是一个线程变量，每次http请求都会产生一个threadLocal副本，在一次请求中就相当于在同一个线程
 * 只要是在同一个线程下，threadLocal中保存的数据，就可以通过set(),get()方法共享数据，线程之间threadLocal
 * 中保存的数据互不影响。
 * 1.基于ThreadLocal封装BaseContext工具类，用户保存和获取当前登录用户id
 * 2.在LoginCheckFilter中将登录成功的员工id保存到threadLocal中
 * 3.在MyMetaObjectHandler中通过工具类BaseContext中的getCurrentId获取到threadLocal中保存的已登录的员工id
 */
public class BaseContext {

    private static ThreadLocal<Long> threadLocal = new ThreadLocal<>();

    /**
     * 设置值
     * @param id
     */
    public static void setCurrentId(Long id){
        threadLocal.set(id);
    }

    /**
     * 获取值
     * @return
     */
    public static Long getCurrentId(){
      return threadLocal.get();
    }

}
